package com.freshman_registration.service;


import com.freshman_registration.pojo.PaymentItem;
import com.freshman_registration.pojo.PaymentRecord;
import com.freshman_registration.util.Result;
import com.github.pagehelper.Page;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.ibatis.annotations.Param;

import java.io.IOException;
import java.util.List;

public interface PaymentService {
    // 学生端
    Result<?> getActivePaymentItems(String studentId);
    Result<?> getMyPaymentRecords(String studentId);
    Result<?> payForItem(Integer itemId, String studentId);

    // 管理员端
    /**
     * 管理员发布缴费项目
     */
    Result<?> addPaymentItem(PaymentItem paymentItem);

    // 查询模糊 项目
    Result<?> searchItemsByName(String itemName, Integer pageNum, Integer pageSize, String status);

    /**
     * 导出缴费记录（支持筛选条件）
     */
    void exportPaymentRecords(Integer itemId, String studentId, String paymentStatus, String startDate,  String endDate, String itemName,String itemType,   // 新增
                              HttpServletResponse response) throws IOException;

    Result<?> deletePaymentItem(Integer itemId);
    Result<?> updatePaymentItem(PaymentItem item);

    Result<?> getAllPaymentItems(Integer pageNum, Integer pageSize);
    /**
     * 查询所有缴费记录，支持筛选条件
     * @param studentId 学生学号
     * @param paymentStatus 缴费状态
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 缴费记录列表
     */
    Page<PaymentRecord> getAllPaymentRecordsByPage(
            Integer pageNum,
            Integer pageSize,
            String studentId,
            Integer itemId,
            String paymentStatus,
            String startDate,
            String endDate,
            String itemName,
            String itemType


    );
    /**
     * 根据ID查询缴费记录
     * @param recordId 缴费记录ID
     * @return 缴费记录
     */
    PaymentRecord getPaymentRecordById(Integer recordId);

    //学生端根据学号和项目ID查询缴费记录
    PaymentRecord selectByStudentIdAndItemId(String studentId, Integer itemId);

    int batchUpdateStatus(String studentId, List<Integer> itemIds, String paymentStatus);
}